﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Onshi.POS.AccesoDatos;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades;

namespace Onshi.POS.Repositorios
{
    public class RepositorioListaPrecioVenta : RepositorioEntidad<ListaPrecioVenta, Int32>
    {
        #region Constructores

        public RepositorioListaPrecioVenta()
            : base()
        {
            servicioDatosListaPrecioVenta = new ServicioDatosListaPrecioVenta();
            repositorioTipoListaPrecioVenta = new RepositorioTipoListaPrecioVenta();
        }

        #endregion

        #region Atributos

        private IServicioDatosListaPrecioVenta servicioDatosListaPrecioVenta;
        private RepositorioTipoListaPrecioVenta repositorioTipoListaPrecioVenta;

        #endregion

        #region Propiedades

        private IServicioDatosListaPrecioVenta ServicioDatosListaPrecioVenta
        {
            get { return servicioDatosListaPrecioVenta; }
        }

        private RepositorioTipoListaPrecioVenta RepositorioTipoListaPrecioVenta
        {
            get { return repositorioTipoListaPrecioVenta; }
        }

        #endregion

        #region Metodos

        protected override ListaPrecioVenta FilaAEntidad(DataRow fila)
        {
            var listaPrecioVenta = new ListaPrecioVenta();
            listaPrecioVenta.Id = (Int32)fila["IdListaPrecioVenta"];
            listaPrecioVenta.Nombre = (String)fila["Nombre"];
            listaPrecioVenta.Observacion = (String)fila["Observacion"];
            listaPrecioVenta.Tipo = RepositorioTipoListaPrecioVenta.DevolverPorId((Byte)fila["IdTipoListaPrecioVenta"]);
            return listaPrecioVenta;
        }

        public override ListaPrecioVenta DevolverPorId(Int32 id)
        {
            var entidad = entidades.Where(x => x.Id == id).FirstOrDefault();
            if (entidad == null)
                using (var ds = ServicioDatosListaPrecioVenta.ListasPreciosVentas_DevolverPorId(id))
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        entidad = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(entidad);
                    }
            return entidad;
        }

        public void Insertar(ListaPrecioVenta entidad)
        {
            entidad.Id = ServicioDatosListaPrecioVenta.ListasPreciosVentas_Insertar(entidad.Nombre, entidad.Tipo.Id, entidad.Observacion);
        }

        public void Modificar(ListaPrecioVenta entidad)
        {
            ServicioDatosListaPrecioVenta.ListasPreciosVentas_Modificar(entidad.Id, entidad.Nombre, entidad.Tipo.Id, entidad.Observacion);
        }

        public void Eliminar(ListaPrecioVenta entidad)
        {
            ServicioDatosListaPrecioVenta.ListasPreciosVentas_Eliminar(entidad.Id);
            entidad = null;
        }

        public List<ListaPrecioVenta> DevolverTodos()
        {
            using (var ds = ServicioDatosListaPrecioVenta.ListasPreciosVentas_DevolverTodos())
                entidades = TablaALista(ds.Tables[0]);
            return entidades;
        }

        #endregion
    }
}
